package com.framework.loippi.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {


	public static String MD5(String s) {
	    try {
	        MessageDigest md = MessageDigest.getInstance("MD5");
	        byte[] bytes = md.digest(s.getBytes("utf-8"));
	        return toHex(bytes);
	    }
	    catch (Exception e) {
	        throw new RuntimeException(e);
	    }
	}

	public static String toHex(byte[] bytes) {
	    final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
	    StringBuilder ret = new StringBuilder(bytes.length * 2);
	    for (int i=0; i<bytes.length; i++) {
	        ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
	        ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
	    }
	    return ret.toString();
	}

	/**
	 * 解决java的md5与PHP的md5结果不同的问题
     * 获取MD5加密后的字符串
     * @param str 明文
     * @return 加密后的字符串
     * @throws Exception 
     */
    public static String getMD5(String str){
        try {
			/** 创建MD5加密对象 */
			MessageDigest md5 = MessageDigest.getInstance("MD5"); 
			/** 进行加密 */
			md5.update(str.getBytes());
			/** 获取加密后的字节数组 */
			byte[] md5Bytes = md5.digest();
			String res = "";
			for (int i = 0; i < md5Bytes.length; i++){
			    int temp = md5Bytes[i] & 0xFF;
			    if (temp <= 0XF){ // 转化成十六进制不够两位，前面加零
			        res += "0";
			    }
			    res += Integer.toHexString(temp);
			}
			return res;
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return null;
    }
}
